package com.lwl.leetcode;

/**
 * @author lwl
 * @Description TODO
 * @date 2025/9/29 16:14
 */
public class Code29Divide {
    public static int divide(int dividend, int divisor) {
        if (divisor == Integer.MIN_VALUE) {
            return dividend == Integer.MIN_VALUE ? 1 : 0;
        }
        if (dividend == Integer.MIN_VALUE) {
            if (divisor == negNum(-1)) {
                return Integer.MAX_VALUE;
            }
            // todo 这里的逻辑很绕，遂放弃
        }
        return -1;
    }

    /**
     * 无符号相加
     */
    private static int add(int a, int b) {
        int res = a;
        while (b != 0) {
            // 无进位相加, 亦或：相同为0，不同为1，这样的话进位信息就被吞了
            res = a ^ b;
            // 相加的进位信息,与运算：全1为1，无1为0，这样再向右移一位便是原本的进位信息
            b = (a & b) << 1;
            a = res;
        }
        return res;
    }

    /**
     * 无符号相减
     */
    public static int minus(int a, int b) {
        // a + b ==> a + (-b)
        // (-b) ==> b取反+1
        return add(a, negNum(b));
    }

    /**
     * 获取对应的负数
     */
    public static int negNum(int num) {
        return add(~num, 1);
    }

//    /**
//     * 无符号相乘
//     */
//    public static int multi(int a, int b) {
//
//    }
}
